<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
    <title>DDOS攻击响应</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            display: block;
            margin:10px auto;
            margin-bottom: 0;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">DDOS攻击响应</div>
        </div>
        <div id="author-info">
          <div id="author-name" class="text">yuguanc</div>
          <div id="share-time" class="text">2018-05-28</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg ed:vSpacing="30" id="page1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" ed:name="Page-1" height="2023" xmlns:ed="http://www.edrawsoft.cn/xml/2017/SVGExtensions/" ed:hSpacing="30" xmlns="http://www.w3.org/2000/svg" width="2380" viewBox="0 0 2380 2023" preserveAspectRadio="xMinYMin meet">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st5 {fill:#303030;font-family:宋体;font-size:10pt}
.st4 {fill:#303030;font-family:宋体;font-size:12pt}
.st6 {fill:#303030;font-family:宋体;font-size:14pt}
]]></style>
    <defs>
        <linearGradient id="lg2" y1="0%" x2="0%" x1="0%" y2="100%">
            <stop stop-color="#ffffff" offset="0"/>
            <stop stop-color="#f0f5f0" offset="0.25"/>
            <stop stop-color="#e1ebe1" offset="0.75"/>
            <stop stop-color="#c8d7c8" offset="1"/>
        </linearGradient>
    </defs>
    <rect height="2023" y="0" x="0" width="2380" fill="#ffffff"/>
    <g id="231" ed:parentid="101" ed:height="40" ed:layout="rightmap" ed:width="195" transform="translate(1087,491.65)">
        <path stroke="#4486b1" d="M4,0L191,0C193.2,0,195,1.8,195,4L195,36C195,38.2,193.2,40,191,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" stroke-linejoin="round" fill="#f5f9fe"/>
        <path id="232" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-39.4,219C3.8,109.9,-48.7,-250,73.3,-250" transform="translate(-73.25,269.98)" fill="none"/>
        <text class="st4">
            <tspan y="26.5" textLength="152" x="22" lengthAdjust="spacing" style="white-space:pre">拒绝服务攻击（DOS）</tspan>
        </text>
    </g>
    <g id="233" ed:parentid="101" ed:height="40" ed:layout="leftmap" ed:width="155" transform="translate(639,991.6)">
        <path stroke="#4486b1" d="M4,0L151,0C153.2,0,155,1.8,155,4L155,36C155,38.2,153.2,40,151,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" stroke-linejoin="round" fill="#f5f9fe"/>
        <path id="234" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-10.3,0C-32.2,0,-52.7,0,-73.3,0" transform="translate(228.25,20)" fill="none"/>
        <text class="st4">
            <tspan y="26.5" textLength="112" x="22" lengthAdjust="spacing" style="white-space:pre">分布式拒绝服务</tspan>
        </text>
    </g>
    <g id="235" ed:parentid="101" ed:height="40" ed:layout="rightmap" ed:width="107" transform="translate(1087,1374.75)">
        <path stroke="#4486b1" d="M4,0L103,0C105.2,0,107,1.8,107,4L107,36C107,38.2,105.2,40,103,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" stroke-linejoin="round" fill="#f5f9fe"/>
        <path id="236" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-37,-160.6C1,-69.4,-35.4,191.6,73.3,191.6" transform="translate(-73.25,-171.58)" fill="none"/>
        <text class="st4">
            <tspan y="26.5" textLength="64" x="22" lengthAdjust="spacing" style="white-space:pre">实现技术</tspan>
        </text>
    </g>
    <g id="237" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="918" transform="translate(1311,151)">
        <path id="238" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,170.1C5.8,170.1,-14.5,-170.1,14.5,-170.1" transform="translate(-14.5,190.58)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L918,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="910" x="4" lengthAdjust="spacing" style="white-space:pre">简单的破快性攻击，通常利用传输协议的缺陷，系统存在的漏洞没服务的漏洞对系统发动大规模的进攻，小号系统的各种软硬件资源，造成崩溃、瘫痪、宕机等</tspan>
        </text>
    </g>
    <g id="239" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="73" transform="translate(1311,194.8)">
        <path id="240" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,148.2C5.8,148.2,-14.5,-148.2,14.5,-148.2" transform="translate(-14.5,168.67)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="65" x="4" lengthAdjust="spacing" style="white-space:pre">有意与无意</tspan>
        </text>
    </g>
    <g id="241" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1311,238.6)">
        <path id="242" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,126.3C5.8,126.3,-14.5,-126.3,14.5,-126.3" transform="translate(-14.5,146.77)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">主要原因</tspan>
        </text>
    </g>
    <g id="243" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="99" transform="translate(1311,311.6)">
        <path id="244" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,89.8C5.8,89.8,-14.5,-89.8,14.5,-89.8" transform="translate(-14.5,110.27)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="91" x="4" lengthAdjust="spacing" style="white-space:pre">可分配服务资源</tspan>
        </text>
    </g>
    <g id="245" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="86" transform="translate(1311,428.4)">
        <path id="246" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,31.4C3.6,31.4,-9.4,-31.4,14.5,-31.4" transform="translate(-14.5,51.88)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="78" x="4" lengthAdjust="spacing" style="white-space:pre">实现思路分类</tspan>
        </text>
    </g>
    <g id="247" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="99" transform="translate(1311,516)">
        <path id="248" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-12.4C-0,-12.4,-0.9,12.4,14.5,12.4" transform="translate(-14.5,8.08)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="91" x="4" lengthAdjust="spacing" style="white-space:pre">漏洞利用方式类</tspan>
        </text>
    </g>
    <g id="249" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="112" transform="translate(1311,574.4)">
        <path id="250" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-41.6C5,-41.6,-12.5,41.6,14.5,41.6" transform="translate(-14.5,-21.13)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">发送速率变化方式</tspan>
        </text>
    </g>
    <g id="251" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="112" transform="translate(1311,632.8)">
        <path id="252" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-70.8C5.8,-70.8,-14.5,70.8,14.5,70.8" transform="translate(-14.5,-50.33)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">按生产的影响分类</tspan>
        </text>
    </g>
    <g id="253" ed:parentid="231" ed:height="20.5" ed:layout="rightmap" ed:width="34" transform="translate(1311,764.2)">
        <path id="254" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-136.5C5.8,-136.5,-14.5,136.5,14.5,136.5" transform="translate(-14.5,-116.03)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">防御</tspan>
        </text>
    </g>
    <g id="255" ed:parentid="239" ed:height="20.5" ed:layout="rightmap" ed:width="34" transform="translate(1413,180.2)">
        <path id="256" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">有意</tspan>
        </text>
    </g>
    <g id="257" ed:parentid="239" ed:height="20.5" ed:layout="rightmap" ed:width="34" transform="translate(1413,209.4)">
        <path id="258" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">无意</tspan>
        </text>
    </g>
    <g id="259" ed:parentid="255" ed:height="20.5" ed:layout="rightmap" ed:width="151" transform="translate(1476,180.2)">
        <path id="260" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">被授权用户过量使用资产</tspan>
        </text>
    </g>
    <g id="261" ed:parentid="257" ed:height="20.5" ed:layout="rightmap" ed:width="203" transform="translate(1476,209.4)">
        <path id="262" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L203,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="195" x="4" lengthAdjust="spacing" style="white-space:pre">合法用户无意的操作使资源不可用</tspan>
        </text>
    </g>
    <g id="263" ed:parentid="241" ed:height="20.5" ed:layout="rightmap" ed:width="151" transform="translate(1400,238.6)">
        <path id="264" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">网络协议本身的安全缺陷</tspan>
        </text>
    </g>
    <g id="265" ed:parentid="243" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1439,267.8)">
        <path id="266" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" transform="translate(-14.5,42.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">网络带宽</tspan>
        </text>
    </g>
    <g id="267" ed:parentid="243" ed:height="20.5" ed:layout="rightmap" ed:width="112" transform="translate(1439,297)">
        <path id="268" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">文件系统空间容量</tspan>
        </text>
    </g>
    <g id="269" ed:parentid="243" ed:height="20.5" ed:layout="rightmap" ed:width="73" transform="translate(1439,326.2)">
        <path id="270" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="65" x="4" lengthAdjust="spacing" style="white-space:pre">开放的集成</tspan>
        </text>
    </g>
    <g id="271" ed:parentid="243" ed:height="20.5" ed:layout="rightmap" ed:width="86" transform="translate(1439,355.4)">
        <path id="272" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" transform="translate(-14.5,-1.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="78" x="4" lengthAdjust="spacing" style="white-space:pre">向内的连接等</tspan>
        </text>
    </g>
    <g id="273" ed:parentid="245" ed:height="20.5" ed:layout="rightmap" ed:width="125" transform="translate(1426,384.6)">
        <path id="274" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" transform="translate(-14.5,42.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L125,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="117" x="4" lengthAdjust="spacing" style="white-space:pre">滥用合理的服务请求</tspan>
        </text>
    </g>
    <g id="275" ed:parentid="245" ed:height="20.5" ed:layout="rightmap" ed:width="138" transform="translate(1426,413.8)">
        <path id="276" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L138,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="130" x="4" lengthAdjust="spacing" style="white-space:pre">制造高流量的无用数据</tspan>
        </text>
    </g>
    <g id="277" ed:parentid="245" ed:height="20.5" ed:layout="rightmap" ed:width="112" transform="translate(1426,443)">
        <path id="278" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">利用传输协议缺陷</tspan>
        </text>
    </g>
    <g id="279" ed:parentid="245" ed:height="20.5" ed:layout="rightmap" ed:width="125" transform="translate(1426,472.2)">
        <path id="280" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" transform="translate(-14.5,-1.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L125,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="117" x="4" lengthAdjust="spacing" style="white-space:pre">利用服务器程序漏洞</tspan>
        </text>
    </g>
    <g id="281" ed:parentid="247" ed:height="20.5" ed:layout="rightmap" ed:width="99" transform="translate(1439,501.4)">
        <path id="282" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="91" x="4" lengthAdjust="spacing" style="white-space:pre">特定资源消耗类</tspan>
        </text>
    </g>
    <g id="283" ed:parentid="247" ed:height="20.5" ed:layout="rightmap" ed:width="73" transform="translate(1439,530.6)">
        <path id="284" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="65" x="4" lengthAdjust="spacing" style="white-space:pre">暴力攻击类</tspan>
        </text>
    </g>
    <g id="285" ed:parentid="249" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1452,559.8)">
        <path id="286" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">固定速率</tspan>
        </text>
    </g>
    <g id="287" ed:parentid="249" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1452,589)">
        <path id="288" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">可变速率</tspan>
        </text>
    </g>
    <g id="289" ed:parentid="251" ed:height="20.5" ed:layout="rightmap" ed:width="112" transform="translate(1452,618.2)">
        <path id="290" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">系统或程序崩溃类</tspan>
        </text>
    </g>
    <g id="291" ed:parentid="251" ed:height="20.5" ed:layout="rightmap" ed:width="73" transform="translate(1452,647.4)">
        <path id="292" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="65" x="4" lengthAdjust="spacing" style="white-space:pre">服务降级类</tspan>
        </text>
    </g>
    <g id="293" ed:parentid="253" ed:height="20.5" ed:layout="rightmap" ed:width="34" transform="translate(1374,691.2)">
        <path id="294" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,36.5C4.4,36.5,-11.2,-36.5,14.5,-36.5" transform="translate(-14.5,57)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">难点</tspan>
        </text>
    </g>
    <g id="295" ed:parentid="253" ed:height="20.5" ed:layout="rightmap" ed:width="34" transform="translate(1374,793.4)">
        <path id="296" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" transform="translate(-14.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">方法</tspan>
        </text>
    </g>
    <g id="297" ed:parentid="293" ed:height="20.5" ed:layout="rightmap" ed:width="138" transform="translate(1437,676.6)">
        <path id="298" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L138,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="130" x="4" lengthAdjust="spacing" style="white-space:pre">不容易确定攻击者位置</tspan>
        </text>
    </g>
    <g id="299" ed:parentid="293" ed:height="20.5" ed:layout="rightmap" ed:width="333" transform="translate(1437,705.8)">
        <path id="300" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L333,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="325" x="4" lengthAdjust="spacing" style="white-space:pre">完全阻止不可实现，但是适当的防范可减少被攻击的机会</tspan>
        </text>
    </g>
    <g id="301" ed:parentid="295" ed:height="20.5" ed:layout="rightmap" ed:width="99" transform="translate(1437,735)">
        <path id="302" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,29.2C3.3,29.2,-8.6,-29.2,14.5,-29.2" transform="translate(-14.5,49.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="91" x="4" lengthAdjust="spacing" style="white-space:pre">有效完善的设计</tspan>
        </text>
    </g>
    <g id="303" ed:parentid="295" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1437,764.2)">
        <path id="304" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" transform="translate(-14.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">带宽限制</tspan>
        </text>
    </g>
    <g id="305" ed:parentid="295" ed:height="20.5" ed:layout="rightmap" ed:width="86" transform="translate(1437,793.4)">
        <path id="306" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="78" x="4" lengthAdjust="spacing" style="white-space:pre">及时更新补丁</tspan>
        </text>
    </g>
    <g id="307" ed:parentid="295" ed:height="20.5" ed:layout="rightmap" ed:width="112" transform="translate(1437,822.6)">
        <path id="308" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" transform="translate(-14.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">只运行必要的通信</tspan>
        </text>
    </g>
    <g id="309" ed:parentid="295" ed:height="20.5" ed:layout="rightmap" ed:width="74" transform="translate(1437,851.8)">
        <path id="310" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-29.2C3.3,-29.2,-8.6,29.2,14.5,29.2" transform="translate(-14.5,-8.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L74,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="66" x="4" lengthAdjust="spacing" style="white-space:pre">封锁恶意IP</tspan>
        </text>
    </g>
    <g id="311" ed:parentid="233" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(576,607.15)">
        <path id="312" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,192C-5.8,192,14.5,-192,-14.5,-192" transform="translate(48.5,212.48)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">定义</tspan>
        </text>
    </g>
    <g id="313" ed:parentid="233" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(576,680.15)">
        <path id="314" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,155.5C-5.8,155.5,14.5,-155.5,-14.5,-155.5" transform="translate(48.5,175.97)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">组成</tspan>
        </text>
    </g>
    <g id="315" ed:parentid="233" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(576,782.35)">
        <path id="316" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,104.4C-5.8,104.4,14.5,-104.4,-14.5,-104.4" transform="translate(48.5,124.88)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">过程</tspan>
        </text>
    </g>
    <g id="317" ed:parentid="233" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(576,913.75)">
        <path id="318" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,38.7C-4.6,38.7,11.8,-38.7,-14.5,-38.7" transform="translate(48.5,59.17)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">现象</tspan>
        </text>
    </g>
    <g id="319" ed:parentid="233" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(576,1045.15)">
        <path id="320" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-27C-2.9,-27,7.8,27,-14.5,27" transform="translate(48.5,-6.52)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">工具</tspan>
        </text>
    </g>
    <g id="321" ed:parentid="233" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(576,1191.15)">
        <path id="322" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-100C-5.8,-100,14.5,100,-14.5,100" transform="translate(48.5,-79.52)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">检测</tspan>
        </text>
    </g>
    <g id="323" ed:parentid="233" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(576,1351.75)">
        <path id="324" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-180.3C-5.8,-180.3,14.5,180.3,-14.5,180.3" transform="translate(48.5,-159.83)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">防御</tspan>
        </text>
    </g>
    <g id="325" ed:parentid="311" ed:height="20.5" ed:layout="leftmap" ed:width="276" transform="translate(271,592.55)">
        <path id="326" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" transform="translate(290.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L276,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="268" x="4" lengthAdjust="spacing" style="white-space:pre">借助C/S技术，将多个计算机联合作为攻击平台</tspan>
        </text>
    </g>
    <g id="327" ed:parentid="311" ed:height="20.5" ed:layout="leftmap" ed:width="151" transform="translate(396,621.75)">
        <path id="328" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" transform="translate(165.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">分别进行不同类型的攻击</tspan>
        </text>
    </g>
    <g id="329" ed:parentid="313" ed:height="20.5" ed:layout="leftmap" ed:width="47" transform="translate(500,650.95)">
        <path id="330" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,14.6C-0.5,14.6,2,-14.6,-14.5,-14.6" transform="translate(61.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L47,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="39" x="4" lengthAdjust="spacing" style="white-space:pre">客户端</tspan>
        </text>
    </g>
    <g id="331" ed:parentid="313" ed:height="20.5" ed:layout="leftmap" ed:width="47" transform="translate(500,680.15)">
        <path id="332" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(61.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L47,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="39" x="4" lengthAdjust="spacing" style="white-space:pre">服务端</tspan>
        </text>
    </g>
    <g id="333" ed:parentid="313" ed:height="20.5" ed:layout="leftmap" ed:width="60" transform="translate(487,709.35)">
        <path id="334" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-14.6C-0.5,-14.6,2,14.6,-14.5,14.6" transform="translate(74.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">守护程序</tspan>
        </text>
    </g>
    <g id="335" ed:parentid="329" ed:height="20.5" ed:layout="leftmap" ed:width="151" transform="translate(320,650.95)">
        <path id="336" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(165.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">控制台，发起攻击的主机</tspan>
        </text>
    </g>
    <g id="337" ed:parentid="331" ed:height="20.5" ed:layout="leftmap" ed:width="190" transform="translate(281,680.15)">
        <path id="338" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(204.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L190,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="182" x="4" lengthAdjust="spacing" style="white-space:pre">攻击器，执行服务端的攻击指令</tspan>
        </text>
    </g>
    <g id="339" ed:parentid="333" ed:height="20.5" ed:layout="leftmap" ed:width="307" transform="translate(151,709.35)">
        <path id="340" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(321.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L307,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="299" x="4" lengthAdjust="spacing" style="white-space:pre">攻击器、攻击代理、直接或间接与攻击目标进行通信</tspan>
        </text>
    </g>
    <g id="341" ed:parentid="315" ed:height="20.5" ed:layout="leftmap" ed:width="216" transform="translate(331,738.55)">
        <path id="342" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,21.9C-2,21.9,5.5,-21.9,-14.5,-21.9" transform="translate(230.5,42.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L216,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="208" x="4" lengthAdjust="spacing" style="white-space:pre">探测扫描大量主机以寻找可入侵主机</tspan>
        </text>
    </g>
    <g id="343" ed:parentid="315" ed:height="20.5" ed:layout="leftmap" ed:width="216" transform="translate(331,767.75)">
        <path id="344" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" transform="translate(230.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L216,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="208" x="4" lengthAdjust="spacing" style="white-space:pre">入侵有安全漏洞的主机并获取控制权</tspan>
        </text>
    </g>
    <g id="345" ed:parentid="315" ed:height="20.5" ed:layout="leftmap" ed:width="333" transform="translate(214,796.95)">
        <path id="346" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" transform="translate(347.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L333,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="325" x="4" lengthAdjust="spacing" style="white-space:pre">在每台被入侵主机中安装攻击所用的客户进程或守护进行</tspan>
        </text>
    </g>
    <g id="347" ed:parentid="315" ed:height="20.5" ed:layout="leftmap" ed:width="333" transform="translate(214,826.15)">
        <path id="348" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-21.9C-2,-21.9,5.5,21.9,-14.5,21.9" transform="translate(347.5,-1.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L333,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="325" x="4" lengthAdjust="spacing" style="white-space:pre">向装有客户进程的主控端主机发出命令，由他们协同入侵</tspan>
        </text>
    </g>
    <g id="349" ed:parentid="317" ed:height="20.5" ed:layout="leftmap" ed:width="120" transform="translate(427,855.35)">
        <path id="350" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,29.2C-3.3,29.2,8.6,-29.2,-14.5,-29.2" transform="translate(134.5,49.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L120,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="112" x="4" lengthAdjust="spacing" style="white-space:pre">大量等待的TCP连接</tspan>
        </text>
    </g>
    <g id="351" ed:parentid="317" ed:height="20.5" ed:layout="leftmap" ed:width="190" transform="translate(357,884.55)">
        <path id="352" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,14.6C-0.5,14.6,2,-14.6,-14.5,-14.6" transform="translate(204.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L190,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="182" x="4" lengthAdjust="spacing" style="white-space:pre">大量无用的数据包，原地址造假</tspan>
        </text>
    </g>
    <g id="353" ed:parentid="317" ed:height="20.5" ed:layout="leftmap" ed:width="99" transform="translate(448,913.75)">
        <path id="354" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(113.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="91" x="4" lengthAdjust="spacing" style="white-space:pre">高流量无用数据</tspan>
        </text>
    </g>
    <g id="355" ed:parentid="317" ed:height="20.5" ed:layout="leftmap" ed:width="151" transform="translate(396,942.95)">
        <path id="356" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-14.6C-0.5,-14.6,2,14.6,-14.5,14.6" transform="translate(165.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">无法及时处理的正常请求</tspan>
        </text>
    </g>
    <g id="357" ed:parentid="317" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(513,972.15)">
        <path id="358" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-29.2C-3.3,-29.2,8.6,29.2,-14.5,29.2" transform="translate(48.5,-8.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">死机</tspan>
        </text>
    </g>
    <g id="359" ed:parentid="319" ed:height="20.5" ed:layout="leftmap" ed:width="43" transform="translate(504,1001.35)">
        <path id="360" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,21.9C-2,21.9,5.5,-21.9,-14.5,-21.9" transform="translate(57.5,42.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L43,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="35" x="4" lengthAdjust="spacing" style="white-space:pre">TFN2K</tspan>
        </text>
    </g>
    <g id="361" ed:parentid="319" ed:height="20.5" ed:layout="leftmap" ed:width="50" transform="translate(497,1030.55)">
        <path id="362" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" transform="translate(64.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L50,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="42" x="4" lengthAdjust="spacing" style="white-space:pre">Trinoo</tspan>
        </text>
    </g>
    <g id="363" ed:parentid="319" ed:height="20.5" ed:layout="leftmap" ed:width="92" transform="translate(455,1059.75)">
        <path id="364" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" transform="translate(106.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L92,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="84" x="4" lengthAdjust="spacing" style="white-space:pre">Sracheldraht</tspan>
        </text>
    </g>
    <g id="365" ed:parentid="319" ed:height="20.5" ed:layout="leftmap" ed:width="34" transform="translate(513,1088.95)">
        <path id="366" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-21.9C-2,-21.9,5.5,21.9,-14.5,21.9" transform="translate(48.5,-1.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">其他</tspan>
        </text>
    </g>
    <g id="367" ed:parentid="321" ed:height="20.5" ed:layout="leftmap" ed:width="60" transform="translate(487,1118.15)">
        <path id="368" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,36.5C-4.4,36.5,11.2,-36.5,-14.5,-36.5" transform="translate(74.5,57)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">核心方案</tspan>
        </text>
    </g>
    <g id="369" ed:parentid="321" ed:height="20.5" ed:layout="leftmap" ed:width="60" transform="translate(487,1205.75)">
        <path id="370" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" transform="translate(74.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">异常检测</tspan>
        </text>
    </g>
    <g id="371" ed:parentid="367" ed:height="20.5" ed:layout="leftmap" ed:width="99" transform="translate(359,1118.15)">
        <path id="372" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(113.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="91" x="4" lengthAdjust="spacing" style="white-space:pre">异常的交通流量</tspan>
        </text>
    </g>
    <g id="373" ed:parentid="369" ed:height="20.5" ed:layout="leftmap" ed:width="155" transform="translate(303,1147.35)">
        <path id="374" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,29.2C-3.3,29.2,8.6,-29.2,-14.5,-29.2" transform="translate(169.5,49.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L155,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="147" x="4" lengthAdjust="spacing" style="white-space:pre">大量的DNS PTR 查询请求</tspan>
        </text>
    </g>
    <g id="375" ed:parentid="369" ed:height="20.5" ed:layout="leftmap" ed:width="216" transform="translate(242,1176.55)">
        <path id="376" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,14.6C-0.5,14.6,2,-14.6,-14.5,-14.6" transform="translate(230.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L216,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="208" x="4" lengthAdjust="spacing" style="white-space:pre">超出网络正常工作时的极限通讯流量</tspan>
        </text>
    </g>
    <g id="377" ed:parentid="369" ed:height="20.5" ed:layout="leftmap" ed:width="161" transform="translate(297,1205.75)">
        <path id="378" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(175.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L161,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="153" x="4" lengthAdjust="spacing" style="white-space:pre">特大型的ICMP和UDP数据包</tspan>
        </text>
    </g>
    <g id="379" ed:parentid="369" ed:height="20.5" ed:layout="leftmap" ed:width="232" transform="translate(226,1234.95)">
        <path id="380" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-14.6C-0.5,-14.6,2,14.6,-14.5,14.6" transform="translate(246.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L232,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="224" x="4" lengthAdjust="spacing" style="white-space:pre">不属于正常连接通讯的TCP和UDP数据包</tspan>
        </text>
    </g>
    <g id="381" ed:parentid="369" ed:height="20.5" ed:layout="leftmap" ed:width="255" transform="translate(203,1264.15)">
        <path id="382" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-29.2C-3.3,-29.2,8.6,29.2,-14.5,29.2" transform="translate(269.5,-8.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L255,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="247" x="4" lengthAdjust="spacing" style="white-space:pre">数据段内容只包含文字和数字字符的数据包</tspan>
        </text>
    </g>
    <g id="383" ed:parentid="323" ed:height="20.5" ed:layout="leftmap" ed:width="125" transform="translate(422,1293.35)">
        <path id="384" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,29.2C-3.3,29.2,8.6,-29.2,-14.5,-29.2" transform="translate(139.5,49.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L125,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="117" x="4" lengthAdjust="spacing" style="white-space:pre">优化网络和路由结构</tspan>
        </text>
    </g>
    <g id="385" ed:parentid="323" ed:height="20.5" ed:layout="leftmap" ed:width="151" transform="translate(396,1322.55)">
        <path id="386" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,14.6C-0.5,14.6,2,-14.6,-14.5,-14.6" transform="translate(165.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">保护网络及主机系统安全</tspan>
        </text>
    </g>
    <g id="387" ed:parentid="323" ed:height="20.5" ed:layout="leftmap" ed:width="112" transform="translate(435,1351.75)">
        <path id="388" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" transform="translate(126.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">安装入侵检测系统</tspan>
        </text>
    </g>
    <g id="389" ed:parentid="323" ed:height="20.5" ed:layout="leftmap" ed:width="107" transform="translate(440,1380.95)">
        <path id="390" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-14.6C-0.5,-14.6,2,14.6,-14.5,14.6" transform="translate(121.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L107,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="99" x="4" lengthAdjust="spacing" style="white-space:pre">与ISP服务商合作</tspan>
        </text>
    </g>
    <g id="391" ed:parentid="323" ed:height="20.5" ed:layout="leftmap" ed:width="86" transform="translate(461,1410.15)">
        <path id="392" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M14.5,-29.2C-3.3,-29.2,8.6,29.2,-14.5,29.2" transform="translate(100.5,-8.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="78" x="4" lengthAdjust="spacing" style="white-space:pre">使用扫描工具</tspan>
        </text>
    </g>
    <g id="393" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="99" transform="translate(1223,931.9)">
        <path id="394" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,221.2C5.8,221.2,-14.5,-221.2,14.5,-221.2" transform="translate(-14.5,241.68)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="91" x="4" lengthAdjust="spacing" style="white-space:pre">Ping of Death</tspan>
        </text>
    </g>
    <g id="395" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="116" transform="translate(1223,1004.9)">
        <path id="396" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,184.7C5.8,184.7,-14.5,-184.7,14.5,-184.7" transform="translate(-14.5,205.17)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L116,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="108" x="4" lengthAdjust="spacing" style="white-space:pre">泪滴（Teardrop）</tspan>
        </text>
    </g>
    <g id="397" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="95" transform="translate(1223,1107.1)">
        <path id="398" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,133.6C5.8,133.6,-14.5,-133.6,14.5,-133.6" transform="translate(-14.5,154.08)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L95,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="87" x="4" lengthAdjust="spacing" style="white-space:pre">IP欺骗DOS攻击</tspan>
        </text>
    </g>
    <g id="399" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="55" transform="translate(1223,1194.7)">
        <path id="400" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,89.8C5.8,89.8,-14.5,-89.8,14.5,-89.8" transform="translate(-14.5,110.28)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L55,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="47" x="4" lengthAdjust="spacing" style="white-space:pre">UDP洪水</tspan>
        </text>
    </g>
    <g id="401" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="55" transform="translate(1223,1340.7)">
        <path id="402" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,16.8C0.9,16.8,-3.1,-16.8,14.5,-16.8" transform="translate(-14.5,37.28)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L55,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="47" x="4" lengthAdjust="spacing" style="white-space:pre">SYN洪水</tspan>
        </text>
    </g>
    <g id="403" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="62" transform="translate(1223,1472.1)">
        <path id="404" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-48.9C5.5,-48.9,-13.9,48.9,14.5,48.9" transform="translate(-14.5,-28.42)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L62,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="54" x="4" lengthAdjust="spacing" style="white-space:pre">Land攻击</tspan>
        </text>
    </g>
    <g id="405" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="69" transform="translate(1223,1515.9)">
        <path id="406" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-70.8C5.8,-70.8,-14.5,70.8,14.5,70.8" transform="translate(-14.5,-50.32)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L69,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="61" x="4" lengthAdjust="spacing" style="white-space:pre">Smurf攻击</tspan>
        </text>
    </g>
    <g id="407" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="83" transform="translate(1223,1559.7)">
        <path id="408" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-92.7C5.8,-92.7,-14.5,92.7,14.5,92.7" transform="translate(-14.5,-72.22)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L83,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="75" x="4" lengthAdjust="spacing" style="white-space:pre">Fraggle攻击</tspan>
        </text>
    </g>
    <g id="409" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="86" transform="translate(1223,1588.9)">
        <path id="410" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-107.3C5.8,-107.3,-14.5,107.3,14.5,107.3" transform="translate(-14.5,-86.83)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="78" x="4" lengthAdjust="spacing" style="white-space:pre">电子邮件炸弹</tspan>
        </text>
    </g>
    <g id="411" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="86" transform="translate(1223,1618.1)">
        <path id="412" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-121.9C5.8,-121.9,-14.5,121.9,14.5,121.9" transform="translate(-14.5,-101.43)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="78" x="4" lengthAdjust="spacing" style="white-space:pre">畸形消息攻击</tspan>
        </text>
    </g>
    <g id="413" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="113" transform="translate(1223,1647.3)">
        <path id="414" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-136.5C5.8,-136.5,-14.5,136.5,14.5,136.5" transform="translate(-14.5,-116.03)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L113,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="105" x="4" lengthAdjust="spacing" style="white-space:pre">Slashdot effect</tspan>
        </text>
    </g>
    <g id="415" ed:parentid="235" ed:height="20.5" ed:layout="rightmap" ed:width="83" transform="translate(1223,1764.1)">
        <path id="416" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-194.9C5.8,-194.9,-14.5,194.9,14.5,194.9" transform="translate(-14.5,-174.43)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L83,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="75" x="4" lengthAdjust="spacing" style="white-space:pre">WinNuke攻击</tspan>
        </text>
    </g>
    <g id="417" ed:parentid="393" ed:height="20.5" ed:layout="rightmap" ed:width="431" transform="translate(1351,917.3)">
        <path id="418" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L431,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="423" x="4" lengthAdjust="spacing" style="white-space:pre">早起的计算机，ICMP数据包超过64kb时出现一处，导致TCP/IP协议栈崩溃</tspan>
        </text>
    </g>
    <g id="419" ed:parentid="393" ed:height="20.5" ed:layout="rightmap" ed:width="244" transform="translate(1351,946.5)">
        <path id="420" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L244,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="236" x="4" lengthAdjust="spacing" style="white-space:pre">防御，利用系统审计，超过64kb时，丢弃</tspan>
        </text>
    </g>
    <g id="421" ed:parentid="395" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1368,975.7)">
        <path id="422" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" transform="translate(-14.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">分片攻击</tspan>
        </text>
    </g>
    <g id="423" ed:parentid="395" ed:height="20.5" ed:layout="rightmap" ed:width="341" transform="translate(1368,1004.9)">
        <path id="424" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L341,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="333" x="4" lengthAdjust="spacing" style="white-space:pre">大数据传输时需要分片传输，异常的PSH会导致协议栈崩溃</tspan>
        </text>
    </g>
    <g id="425" ed:parentid="395" ed:height="20.5" ed:layout="rightmap" ed:width="242" transform="translate(1368,1034.1)">
        <path id="426" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" transform="translate(-14.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L242,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="234" x="4" lengthAdjust="spacing" style="white-space:pre">防御，添加系统补丁，丢弃异常分片数据</tspan>
        </text>
    </g>
    <g id="427" ed:parentid="397" ed:height="20.5" ed:layout="rightmap" ed:width="68" transform="translate(1347,1063.3)">
        <path id="428" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" transform="translate(-14.5,42.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L68,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="60" x="4" lengthAdjust="spacing" style="white-space:pre">利用RST位</tspan>
        </text>
    </g>
    <g id="429" ed:parentid="397" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1347,1121.7)">
        <path id="430" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">攻击流程</tspan>
        </text>
    </g>
    <g id="431" ed:parentid="429" ed:height="20.5" ed:layout="rightmap" ed:width="164" transform="translate(1436,1092.5)">
        <path id="432" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" transform="translate(-14.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L164,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="156" x="4" lengthAdjust="spacing" style="white-space:pre">合法用户和服务器建立连接</tspan>
        </text>
    </g>
    <g id="433" ed:parentid="429" ed:height="20.5" ed:layout="rightmap" ed:width="172" transform="translate(1436,1121.7)">
        <path id="434" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L172,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="164" x="4" lengthAdjust="spacing" style="white-space:pre">攻击者伪装合法用户发送RST</tspan>
        </text>
    </g>
    <g id="435" ed:parentid="429" ed:height="20.5" ed:layout="rightmap" ed:width="216" transform="translate(1436,1150.9)">
        <path id="436" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" transform="translate(-14.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L216,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="208" x="4" lengthAdjust="spacing" style="white-space:pre">服务器清欢缓存区建立好的合法连接</tspan>
        </text>
    </g>
    <g id="437" ed:parentid="399" ed:height="20.5" ed:layout="rightmap" ed:width="151" transform="translate(1307,1194.7)">
        <path id="438" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">利用主机自动回复的服务</tspan>
        </text>
    </g>
    <g id="439" ed:parentid="437" ed:height="20.5" ed:layout="rightmap" ed:width="29" transform="translate(1487,1194.7)">
        <path id="440" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="21" x="4" lengthAdjust="spacing" style="white-space:pre">UDP</tspan>
        </text>
    </g>
    <g id="441" ed:parentid="439" ed:height="20.5" ed:layout="rightmap" ed:width="57" transform="translate(1545,1180.1)">
        <path id="442" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L57,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="49" x="4" lengthAdjust="spacing" style="white-space:pre">chargen</tspan>
        </text>
    </g>
    <g id="443" ed:parentid="439" ed:height="20.5" ed:layout="rightmap" ed:width="36" transform="translate(1545,1209.3)">
        <path id="444" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L36,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="28" x="4" lengthAdjust="spacing" style="white-space:pre">echo</tspan>
        </text>
    </g>
    <g id="445" ed:parentid="401" ed:height="20.5" ed:layout="rightmap" ed:width="255" transform="translate(1307,1238.5)">
        <path id="446" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,51.1C5.6,51.1,-14.1,-51.1,14.5,-51.1" transform="translate(-14.5,71.6)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L255,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="247" x="4" lengthAdjust="spacing" style="white-space:pre">发送大量的数据连接请求，使对方资源耗尽</tspan>
        </text>
    </g>
    <g id="447" ed:parentid="401" ed:height="20.5" ed:layout="rightmap" ed:width="623" transform="translate(1307,1267.7)">
        <path id="448" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,36.5C4.4,36.5,-11.2,-36.5,14.5,-36.5" transform="translate(-14.5,57)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L623,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="615" x="4" lengthAdjust="spacing" style="white-space:pre">客户端发送SYN，服务器会返回SYN+ACK，加入客户端不在线，服务器在一定时间内重发，成为SYN Timeout</tspan>
        </text>
    </g>
    <g id="449" ed:parentid="401" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1307,1369.9)">
        <path id="450" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" transform="translate(-14.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">防御方法</tspan>
        </text>
    </g>
    <g id="451" ed:parentid="449" ed:height="20.5" ed:layout="rightmap" ed:width="144" transform="translate(1396,1296.9)">
        <path id="452" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,36.5C4.4,36.5,-11.2,-36.5,14.5,-36.5" transform="translate(-14.5,57)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L144,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="136" x="4" lengthAdjust="spacing" style="white-space:pre">缩短SYN Timeout 时间</tspan>
        </text>
    </g>
    <g id="453" ed:parentid="449" ed:height="20.5" ed:layout="rightmap" ed:width="104" transform="translate(1396,1326.1)">
        <path id="454" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" transform="translate(-14.5,42.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L104,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="96" x="4" lengthAdjust="spacing" style="white-space:pre">设置SYN Cookie</tspan>
        </text>
    </g>
    <g id="455" ed:parentid="449" ed:height="20.5" ed:layout="rightmap" ed:width="73" transform="translate(1396,1355.3)">
        <path id="456" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="65" x="4" lengthAdjust="spacing" style="white-space:pre">负反馈策略</tspan>
        </text>
    </g>
    <g id="457" ed:parentid="449" ed:height="20.5" ed:layout="rightmap" ed:width="60" transform="translate(1396,1384.5)">
        <path id="458" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="52" x="4" lengthAdjust="spacing" style="white-space:pre">退让策略</tspan>
        </text>
    </g>
    <g id="459" ed:parentid="449" ed:height="20.5" ed:layout="rightmap" ed:width="120" transform="translate(1396,1413.7)">
        <path id="460" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" transform="translate(-14.5,-1.4)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L120,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="112" x="4" lengthAdjust="spacing" style="white-space:pre">分布式DNS负载均衡</tspan>
        </text>
    </g>
    <g id="461" ed:parentid="449" ed:height="20.5" ed:layout="rightmap" ed:width="47" transform="translate(1396,1442.9)">
        <path id="462" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-36.5C4.4,-36.5,-11.2,36.5,14.5,36.5" transform="translate(-14.5,-16)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L47,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="39" x="4" lengthAdjust="spacing" style="white-space:pre">防火墙</tspan>
        </text>
    </g>
    <g id="463" ed:parentid="403" ed:height="20.5" ed:layout="rightmap" ed:width="504" transform="translate(1314,1472.1)">
        <path id="464" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L504,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="496" x="4" lengthAdjust="spacing" style="white-space:pre">发送大量源地址和目标地址相同的数据包，造成目标解析land包时占用大量的系统资源</tspan>
        </text>
    </g>
    <g id="465" ed:parentid="405" ed:height="20.5" ed:layout="rightmap" ed:width="193" transform="translate(1321,1501.3)">
        <path id="466" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L193,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="185" x="4" lengthAdjust="spacing" style="white-space:pre">利用ip欺骗和ICMP回应引起阻塞</tspan>
        </text>
    </g>
    <g id="467" ed:parentid="405" ed:height="20.5" ed:layout="rightmap" ed:width="359" transform="translate(1321,1530.5)">
        <path id="468" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L359,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="351" x="4" lengthAdjust="spacing" style="white-space:pre">将源地址设置为被攻击主机的地址，将目标地址设为广播地址</tspan>
        </text>
    </g>
    <g id="469" ed:parentid="407" ed:height="20.5" ed:layout="rightmap" ed:width="272" transform="translate(1335,1559.7)">
        <path id="470" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L272,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="264" x="4" lengthAdjust="spacing" style="white-space:pre">与Smurf攻击类似，但是使用的是UDP应答响应</tspan>
        </text>
    </g>
    <g id="471" ed:parentid="409" ed:height="20.5" ed:layout="rightmap" ed:width="112" transform="translate(1338,1588.9)">
        <path id="472" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="104" x="4" lengthAdjust="spacing" style="white-space:pre">大量发送电子邮件</tspan>
        </text>
    </g>
    <g id="473" ed:parentid="411" ed:height="20.5" ed:layout="rightmap" ed:width="294" transform="translate(1338,1618.1)">
        <path id="474" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L294,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="286" x="4" lengthAdjust="spacing" style="white-space:pre">利用目标主机或特定服务存在的安全漏洞进行攻击</tspan>
        </text>
    </g>
    <g id="475" ed:parentid="413" ed:height="20.5" ed:layout="rightmap" ed:width="151" transform="translate(1365,1647.3)">
        <path id="476" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="143" x="4" lengthAdjust="spacing" style="white-space:pre">合法的情况，服务器过载</tspan>
        </text>
    </g>
    <g id="477" ed:parentid="415" ed:height="20.5" ed:layout="rightmap" ed:width="86" transform="translate(1335,1734.9)">
        <path id="478" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" transform="translate(-14.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="78" x="4" lengthAdjust="spacing" style="white-space:pre">带外输出攻击</tspan>
        </text>
    </g>
    <g id="479" ed:parentid="415" ed:height="20.5" ed:layout="rightmap" ed:width="34" transform="translate(1335,1837.1)">
        <path id="480" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-36.5C4.4,-36.5,-11.2,36.5,14.5,36.5" transform="translate(-14.5,-16)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">原理</tspan>
        </text>
    </g>
    <g id="481" ed:parentid="477" ed:height="20.5" ed:layout="rightmap" ed:width="34" transform="translate(1450,1734.9)">
        <path id="482" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="26" x="4" lengthAdjust="spacing" style="white-space:pre">端口</tspan>
        </text>
    </g>
    <g id="483" ed:parentid="481" ed:height="20.5" ed:layout="rightmap" ed:width="29" transform="translate(1513,1676.5)">
        <path id="484" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,29.2C3.3,29.2,-8.6,-29.2,14.5,-29.2" transform="translate(-14.5,49.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="21" x="4" lengthAdjust="spacing" style="white-space:pre">139</tspan>
        </text>
    </g>
    <g id="485" ed:parentid="481" ed:height="20.5" ed:layout="rightmap" ed:width="29" transform="translate(1513,1705.7)">
        <path id="486" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" transform="translate(-14.5,35.1)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="21" x="4" lengthAdjust="spacing" style="white-space:pre">138</tspan>
        </text>
    </g>
    <g id="487" ed:parentid="481" ed:height="20.5" ed:layout="rightmap" ed:width="29" transform="translate(1513,1734.9)">
        <path id="488" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,-0,14.5,-0" transform="translate(-14.5,20.5)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="21" x="4" lengthAdjust="spacing" style="white-space:pre">137</tspan>
        </text>
    </g>
    <g id="489" ed:parentid="481" ed:height="20.5" ed:layout="rightmap" ed:width="29" transform="translate(1513,1764.1)">
        <path id="490" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" transform="translate(-14.5,5.9)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="21" x="4" lengthAdjust="spacing" style="white-space:pre">113</tspan>
        </text>
    </g>
    <g id="491" ed:parentid="481" ed:height="20.5" ed:layout="rightmap" ed:width="22" transform="translate(1513,1793.3)">
        <path id="492" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-29.2C3.3,-29.2,-8.6,29.2,14.5,29.2" transform="translate(-14.5,-8.7)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L22,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="14" x="4" lengthAdjust="spacing" style="white-space:pre">53</tspan>
        </text>
    </g>
    <g id="493" ed:parentid="479" ed:height="20.5" ed:layout="rightmap" ed:width="372" transform="translate(1398,1822.5)">
        <path id="494" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" transform="translate(-14.5,27.8)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L372,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="364" x="4" lengthAdjust="spacing" style="white-space:pre">制造特殊的报文，其指针字段与数据的实际位置不服，存在重合</tspan>
        </text>
    </g>
    <g id="495" ed:parentid="479" ed:height="20.5" ed:layout="rightmap" ed:width="88" transform="translate(1398,1851.7)">
        <path id="496" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" transform="translate(-14.5,13.2)" fill="none"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L88,20.5" fill="none"/>
        <text class="st5">
            <tspan y="15.8" textLength="80" x="4" lengthAdjust="spacing" style="white-space:pre">URG位设置为1</tspan>
        </text>
    </g>
    <g id="101" ed:topictype="mainidea" ed:height="62" ed:layout="map" ed:width="167" transform="translate(857,980.6)">
        <path stroke-width="3" stroke="#4486b1" d="M8,0L159,0C163.4,0,167,3.6,167,8L167,54C167,58.4,163.4,62,159,62L8,62C3.6,62,0,58.4,0,54L0,8C0,3.6,3.6,0,8,0z" stroke-linejoin="round" fill="#eaf3fc"/>
        <text class="st6">
            <tspan y="38.5" textLength="114" x="27" lengthAdjust="spacing" style="white-space:pre">拒绝服务攻击</tspan>
        </text>
    </g>
    <g ed:togtopicid="101" transform="translate(1025,1005.6)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="231" transform="translate(1283,505.65)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="233" transform="translate(626,1005.6)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="235" transform="translate(1195,1388.75)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="239" transform="translate(1385,199.05)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="241" transform="translate(1372,242.85)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="243" transform="translate(1411,315.85)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="245" transform="translate(1398,432.65)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="247" transform="translate(1411,520.25)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="249" transform="translate(1424,578.65)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="251" transform="translate(1424,637.05)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="253" transform="translate(1346,768.45)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="255" transform="translate(1448,184.45)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="257" transform="translate(1448,213.65)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="293" transform="translate(1409,695.45)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="295" transform="translate(1409,797.65)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="311" transform="translate(563,611.4)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="313" transform="translate(563,684.4)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="315" transform="translate(563,786.6)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="317" transform="translate(563,918)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="319" transform="translate(563,1049.4)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="321" transform="translate(563,1195.4)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="323" transform="translate(563,1356)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="329" transform="translate(487,655.2)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="331" transform="translate(487,684.4)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="333" transform="translate(474,713.6)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="367" transform="translate(474,1122.4)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="369" transform="translate(474,1210)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="393" transform="translate(1323,936.15)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="395" transform="translate(1340,1009.15)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="397" transform="translate(1319,1111.35)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="399" transform="translate(1279,1198.95)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="401" transform="translate(1279,1344.95)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="403" transform="translate(1286,1476.35)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="405" transform="translate(1293,1520.15)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="407" transform="translate(1307,1563.95)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="409" transform="translate(1310,1593.15)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="411" transform="translate(1310,1622.35)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="413" transform="translate(1337,1651.55)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="415" transform="translate(1307,1768.35)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="429" transform="translate(1408,1125.95)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="437" transform="translate(1459,1198.95)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="439" transform="translate(1517,1198.95)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="449" transform="translate(1368,1374.15)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="477" transform="translate(1422,1739.15)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="479" transform="translate(1370,1841.35)">
        <use xlink:href="#minus"/>
    </g>
    <g ed:togtopicid="481" transform="translate(1485,1739.15)">
        <use xlink:href="#minus"/>
    </g>
    <symbol id="plus">
        <path d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6z" fill="url(#lg2)"/>
        <path stroke="#46a000" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6zM3,6L9,6M6,3L6,9" fill="none"/>
    </symbol>
    <symbol id="minus">
        <path d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6z" fill="url(#lg2)"/>
        <path stroke="#46a000" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6zM3,6L9,6" fill="none"/>
    </symbol>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsNCnZhciB1YT0obXVhLmluZGV4T2YoJ3J2OjExJykrbXVhLmluZGV4T2YoJ01TSUUnKSk+PTA7DQpOdW1iZXIucHJvdG90eXBlLnRvc3VpdHN2Zz1mdW5jdGlvbiAoKSB7DQogICAgdmFyIG51bT10aGlzLnZhbHVlT2YoKTsNCiAgICBpZihudW0lMT09PTApew0KICAgICAgICByZXR1cm4gbnVtKzAuNQ0KICAgIH1lbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzej1mdW5jdGlvbigpIHsNCiAgICB2YXIgbnVtPXRoaXMudmFsdWVPZigpOw0KICAgIHJldHVybiBudW08MTA/JzAnK251bTpudW07DQp9Ow0KZnVuY3Rpb24gcGFyc2VEYXRlKG51bSkgew0KICAgIHZhciBkYXRlID0gbmV3IERhdGUobnVtKTsNCiAgICB2YXIgWSA9IGRhdGUuZ2V0RnVsbFllYXIoKSArICctJzsNCiAgICB2YXIgTSA9IChkYXRlLmdldE1vbnRoKCkrMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWStNK0QraCttbStzOw0KfQ0KLy8tLXByZWRlZmluZWQNCi8vY29tbWVudC0tDQp2YXIgY29tbWVudHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZz5nW2VkXFw6Y29tbWVudF0nKTsNCmZ1bmN0aW9uIGdldGN3aChwb3B1cCkgew0KICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICB2YXIgdz1wb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaD1wb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7DQogICAgcmV0dXJuIFt3LGhdDQp9DQpmb3IodmFyIGk9MDtpPGNvbW1lbnRzLmxlbmd0aDtpKyspew0KICAgIHZhciBwb3B1cD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnZycpOw0KICAgIHZhciBob3Zlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgIHZhciBvbGluZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsJyNjZGNkZmYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywnMCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywnMTYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywnMTYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsJzAuNicpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJyxjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICBob3Zlci5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICBjb21tZW50c1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgdmFyIGE9SlNPTi5wYXJzZShjb21tZW50c1tpXS5nZXRBdHRyaWJ1dGUoJ2VkOmNvbW1lbnQnKSk7DQogICAgdmFyIGhlaWdodD0wOw0KICAgIHZhciBjYXJyPVtdOw0KICAgIGZvcih2YXIgaj0wO2o8YS5sZW5ndGg7aisrKXsNCiAgICAgICAgdmFyIHN0YW1wPU51bWJlcihhW2pdLkRhdGUpKjEwMDA7DQogICAgICAgIHZhciB0aW1lPXBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgIHZhciBuYW1lPWFbal0uTmFtZTsNCiAgICAgICAgdmFyIG1lc3NhZ2U9YVtqXS5NZXNzYWdlOw0KICAgICAgICB2YXIgbWVzc2FnZUFycj1tZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICB2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnZycpOw0KICAgICAgICB2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBuLnNldEF0dHJpYnV0ZSgneCcsNSk7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCd5JywxMik7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywnIzAwNmVmZicpOw0KICAgICAgICBuLnRleHRDb250ZW50PW5hbWUrJ++8mic7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCcxMicpOw0KICAgICAgICB0LnNldEF0dHJpYnV0ZSgneCcsMjAwKTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ3knLDEyKTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjOTY5Njk2Jyk7DQogICAgICAgIHQudGV4dENvbnRlbnQ9dGltZTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZvbnQtc2l6ZScsJzEwJyk7DQogICAgICAgIG0uc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoMjAsMjcpJyk7DQogICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCcxMicpOw0KICAgICAgICBmb3IodmFyIGs9MDtrPG1lc3NhZ2VBcnIubGVuZ3RoO2srKyl7DQogICAgICAgICAgICB2YXIgdHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ3RzcGFuJyk7DQogICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3knLGsqMTYpOw0KICAgICAgICAgICAgdHMudGV4dENvbnRlbnQ9bWVzc2FnZUFycltrXTsNCiAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICB9DQogICAgICAgIG8uc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoMCwnK2hlaWdodCsnKScpOw0KICAgICAgICBvLmFwcGVuZENoaWxkKG4pOw0KICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICBvLmFwcGVuZENoaWxkKG0pOw0KICAgICAgICBjYXJyLnB1c2gobyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICBoZWlnaHQ9KG1lc3NhZ2VBcnIubGVuZ3RoKzEpKjE2K2hlaWdodDsNCiAgICB9DQogICAgdmFyIHdhcnI9Z2V0Y3doKHBvcHVwKTsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgb2xpbmUuc2V0QXR0cmlidXRlKCd5JywnMCcpOw0KICAgIHZhciBvdz13YXJyWzBdKzEwLjU7DQogICAgdmFyIG9oPXdhcnJbMV0rMzsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyxvdyk7DQogICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLG9oKTsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCd3aGl0ZScpOw0KICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnIzY1NjU2NScpOw0KICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICB2YXIgbD1jYXJyLmxlbmd0aDsNCiAgICB3aGlsZShsLS0pew0KICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChjYXJyW2xdKTsNCiAgICB9DQogICAgcG9wdXAub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9Ow0KICAgIHBvcHVwLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgfTsNCiAgICB2YXIgY3M9Y29tbWVudHNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKS5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgIHZhciBwcz1jb21tZW50c1tpXS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICB2YXIgeD1wYXJzZUZsb2F0KGNzWzBdKStwYXJzZUZsb2F0KHBzWzBdKTsNCiAgICB2YXIgeT1wYXJzZUZsb2F0KHBzWzFdKTsNCiAgICB4PXgudG9zdWl0c3ZnKCk7DQogICAgeT15LnRvc3VpdHN2ZygpOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnY29tbWVudCcsJycpOw0KICAgIHBvcHVwLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnZWQ6Y29tbWVudGlkJyxjb21tZW50c1tpXS5wYXJlbnROb2RlLmlkKTsNCiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZycpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICBjb21tZW50c1tpXS5vbm1vdXNlb3Zlcj1mdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBjb21tZW50aWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpjb21tZW50aWQ9JyIrY29tbWVudGlkKyInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9Ow0KICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgY29tbWVudGlkPXRoaXMucGFyZW50Tm9kZS5pZDsNCi8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6Y29tbWVudGlkPSciK2NvbW1lbnRpZCsiJ11bY29tbWVudF0iKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmKCF1YSl7DQogICAgdmFyIG5vdGVzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOm5vdGVdJyk7DQogICAgZnVuY3Rpb24gZ2V0d2gocyxwKSB7DQogICAgICAgIHZhciBtYWlucD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgbWFpbnAuc3R5bGUuY3NzVGV4dD1zOw0KICAgICAgICBtYWlucC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5pbm5lckhUTUw9cDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYWlucCk7DQogICAgICAgIHZhciB3PW1haW5wLmNsaWVudFdpZHRoOw0KICAgICAgICB2YXIgaD1tYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csaF0NCiAgICB9DQogICAgZm9yKHZhciBpPTA7aTxub3Rlcy5sZW5ndGg7aSsrKXsNCiAgICAgICAgdmFyIGE9bm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlJyk7DQogICAgICAgIHZhciBtYWlucD1hLm1hdGNoKC88cChbXFNcc10qKTxcL3A+L2cpWzBdOw0KICAgICAgICB2YXIgbWFpbnM9YS5tYXRjaCgvc3R5bGU9IiguKj8pIi8pWzFdOw0KICAgICAgICB2YXIgb3V0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCdnJyk7DQogICAgICAgIHZhciBvbGluZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgICAgICB2YXIgcG9wdXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2ZvcmVpZ25PYmplY3QnKTsNCiAgICAgICAgdmFyIGhvdmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCdyZWN0Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCcwJyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywnMC42Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJyxub3Rlc1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIG5vdGVzW2ldLmFwcGVuZENoaWxkKGhvdmVyKTsNCiAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dD1tYWluczsNCiAgICAgICAgcG9wdXAuaW5uZXJIVE1MPW1haW5wOw0KICAgICAgICB2YXIgd2g9Z2V0d2gobWFpbnMsbWFpbnApOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyx3aFswXSsxNik7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jyx3aFsxXSs4KTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoOCw0KScpOw0KICAgICAgICBwb3B1cC5zdHlsZS50ZXh0QWxpZ249J2xlZnQnOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsJzAnKTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsd2hbMF0rMTYpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsd2hbMV0rOCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnI2EyN2EwMCcpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjZmZlNzlkJyk7DQogICAgICAgIG91dC5hcHBlbmRDaGlsZChvbGluZSk7DQogICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ25vdGUnLCcnKTsNCiAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdlZDpub3RlaWQnLG5vdGVzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBvdXQub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIG91dC5vbm1vdXNlb3V0PWZ1bmN0aW9uICgpIHsNCi8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZVJhbmdlKHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZSk6ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7DQoNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHZhciBjcz1ub3Rlc1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcz1ub3Rlc1tpXS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHg9cGFyc2VGbG9hdChjc1swXSkrcGFyc2VGbG9hdChwc1swXSk7DQogICAgICAgIHZhciB5PXBhcnNlRmxvYXQocHNbMV0pOw0KICAgICAgICB4PXgudG9zdWl0c3ZnKCk7DQogICAgICAgIHk9eS50b3N1aXRzdmcoKTsNCiAgICAgICAgb3V0LnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZycpLmFwcGVuZENoaWxkKG91dCk7DQogICAgICAgIG5vdGVzW2ldLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBub3RlaWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOm5vdGVpZD0nIitub3RlaWQrIiddW25vdGVdIikuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBub3Rlc1tpXS5vbm1vdXNlb3V0PWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBub3RlaWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KLy8gICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOm5vdGVpZD0nIitub3RlaWQrIiddW25vdGVdIikuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9ZWxzZXsNCiAgICBjb25zb2xlLmxvZygn5oqx5q2J77yMSUXmtY/op4jlmajkuI3mlK/mjIFub3Rl6Kej5p6Q77yM6K+35L2/55So5YW25LuW5YaF5qC45rWP6KeI5Zmo44CC6LCi6LCi77yBJykNCn0NCi8vLS1ub3RlDQovL2h5cGVybGluay0tDQp2YXIgbGlua3M9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZz5nW2VkXFw6aHlwZXJsaW5rXScpOw0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFycixicnIpIHsNCiAgICB2YXIgbD0wOw0KICAgIHZhciBsbD0wOw0KICAgIGZvcih2YXIgaj0wO2o8YXJyLmxlbmd0aDtqKyspew0KICAgICAgICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBpZighaXNOYU4obGlua2FycltqXSkpew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudD0nUGFnZS0nK2FycltqXTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICBlLnRleHRDb250ZW50PWFycltqXTsNCiAgICAgICAgfQ0KICAgICAgICBlLnN0eWxlLmZvbnRTaXplPScxMnB4JzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoZSk7DQogICAgICAgIHZhciBldz1lLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQ9YnJyW2pdOw0KICAgICAgICBoLnN0eWxlLmZvbnRTaXplPScxMnB4JzsNCiAgICAgICAgaC5zdHlsZS5mb250V2VpZ2h0PSdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodz1oLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoaCk7DQogICAgICAgIGw9ZXc+aHc/ZXc6aHc7DQogICAgICAgIGxsPWw+bGw/bDpsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0KZm9yKHZhciBpPTA7aTxsaW5rcy5sZW5ndGg7aSsrKXsNCiAgICB2YXIgcG9wdXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2cnKTsNCiAgICB2YXIgaG92ZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ3JlY3QnKTsNCiAgICB2YXIgZGVzY2Fycj1bXTsNCiAgICB2YXIgbGlua2Fycj1bXTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjY2RjZGZmJyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywnMCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgneScsJzAnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsJzE2Jyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsJzE2Jyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCcwLjYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsbGlua3NbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgaG92ZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgbGlua3NbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgIHZhciBhPUpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgdmFyIGNzPWxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICB2YXIgcHM9bGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgdmFyIHg9cGFyc2VGbG9hdChjc1swXSkrcGFyc2VGbG9hdChwc1swXSk7DQogICAgdmFyIHk9cGFyc2VGbG9hdChwc1sxXSk7DQogICAgeD14LnRvc3VpdHN2ZygpOw0KICAgIHk9eS50b3N1aXRzdmcoKTsNCiAgICB2YXIgYWw9YS5sZW5ndGg7DQogICAgZm9yKHZhciBqPTA7ajxhbDtqKyspew0KICAgICAgICBsaW5rYXJyLnB1c2goYVtqXS5saW5rKTsNCiAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgfQ0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgIHZhciBtYXg9Z2V0bWF4bGVuKGxpbmthcnIsZGVzY2Fycik7DQogICAgZm9yKHZhciBrPTA7azxhbDtrKyspew0KICAgICAgICB2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnYScpOw0KICAgICAgICB2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgICAgICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBpZihpc05hTihsaW5rYXJyW2tdKSl7DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgnaHJlZicsbGlua2FycltrXSk7DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywnX2JsYW5rJyk7DQogICAgICAgICAgICBlLnRleHRDb250ZW50PWxpbmthcnJba107DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudD0nUGFnZS0nK2xpbmthcnJba107DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgnaHJlZicsJyMnK2xpbmthcnJba10pOw0KICAgICAgICB9DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCd3aWR0aCcsbWF4KzEwKTsNCiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsJzMzJyk7DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCdzdHJva2UnLCcjOTk5OTk5Jyk7DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCdmaWxsJywnd2hpdGUnKTsNCiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLDMzKmspOw0KICAgICAgICBmLnRleHRDb250ZW50PWRlc2NhcnJba107DQogICAgICAgIGYuc3R5bGUuZm9udFNpemU9JzEycHgnOw0KICAgICAgICBmLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnOw0KICAgICAgICBmLnNldEF0dHJpYnV0ZSgneCcsNSk7DQogICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywzMyprKzEyKTsNCiAgICAgICAgZS5zdHlsZS5mb250U2l6ZT0nMTJweCc7DQogICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywzMyprKzI4KTsNCiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLDUpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGQpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICBjLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmZpbGw9JyNlMWUxZmYnDQogICAgICAgIH07DQogICAgICAgIGMub25tb3VzZW91dD1mdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsPSd3aGl0ZScNCiAgICAgICAgfTsNCiAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoYyk7DQogICAgfQ0KICAgIHBvcHVwLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywnJyk7DQogICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpsaW5raWQnLGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgIHBvcHVwLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgfTsNCiAgICBwb3B1cC5vbmNsaWNrPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9Ow0KICAgIHBvcHVwLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIH07DQogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3N2Zy1jb250YWluZXIgPiBzdmcnKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgbGlua3NbaV0ub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgbGlua2lkPXRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bGlua2lkPSciK2xpbmtpZCsiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9DQogICAgbGlua3NbaV0ub25tb3VzZW91dD1mdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBsaW5raWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIitsaW5raWQrIiddW2h5cGVybGlua10iKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9DQp9DQovLy0taHlwZXJsaW5rDQovL2luaXRpYWxpemUtLQ0KdmFyIHNoYXBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2dbZWRcXDp0b2d0b3BpY2lkXScpOw0KdmFyIG1JZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlPXt9Ow0KdmFyIGV4dHJhUmVsYT17fTsNCnZhciBjaGVja0lEPScnOw0KZm9yKHZhciBpPTA7aTxtSWQubGVuZ3RoO2krKyl7DQogICAgdmFyIHR5cGU9bUlkW2ldLmdldEF0dHJpYnV0ZSgnZWQ6dG9waWN0eXBlJyk7DQogICAgdmFyIHNpZD1tSWRbaV0uaWQ7DQogICAgaWYodHlwZSE9PSdjYWxsb3V0Jyl7DQogICAgICAgIGluaXQoc2lkLGRhdGFUcmVlKQ0KICAgIH0NCn0NCmZ1bmN0aW9uIGluaXQoaWQsIG9iaikgew0KICAgIHZhciBjaGlsZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6cGFyZW50aWQ9JyIgKyBpZCArICInXTpub3QoW2VkXFw6dG9waWN0eXBlXSkiKTsNCiAgICB2YXIgY2FsbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6cGFyZW50aWQ9JyIgKyBpZCArICInXVtlZFxcOnRvcGljdHlwZV0iKTsNCiAgICB2YXIgc3VtbWFyeSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInBhdGhbZWRcXDpwYXJlbnRpZCo9JyIgKyBpZCArICInXVtlZFxcOnR5cGU9J3N1bW1hcnknXSIpOw0KICAgIHZhciBib3VuZGFyeT0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6ZnJvbWlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIHZhciByZWxhdG89ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZ1tlZFxcOnRvaWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgb2JqWyJtIiArIGlkXSA9IHt9Ow0KICAgIHZhciB0eXBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9waWN0eXBlJyk7DQogICAgdmFyIGl3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOmhlaWdodCcpOw0KICAgIGlmICh0eXBlKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0udHlwZSA9IHR5cGU7DQogICAgfQ0KICAgIGlmKGl3JiZpaCl7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPWl3Ow0KICAgICAgICBvYmpbIm0iICsgaWRdLmhlaWdodCA9aWg7DQogICAgfQ0KICAgIGlmIChyZWxhZnJvbS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhZnJvbSA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGFmcm9tLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgaW5kZXhpZCA9IHJlbGFmcm9tW2ldLmlkOw0KICAgICAgICAgICAgdmFyIHRvaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbmRleGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvaWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogaWQsDQogICAgICAgICAgICAgICAgICAgIHRvaWQ6IHRvaWQsDQogICAgICAgICAgICAgICAgICAgIGlzQzogZmFsc2UNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhZnJvbVtpbmRleGlkXT17fTsNCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0ucmVsYWZyb20uZGlzcGxheT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnPydibG9jayc6J25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChyZWxhdG8ubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ucmVsYXRvID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYXRvLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgaW5kZXhpZD1yZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6ZnJvbWlkJyk7DQogICAgICAgICAgICBpZihleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCl7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdPXsNCiAgICAgICAgICAgICAgICAgICAgaWQ6aW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOmZyb21pZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDppZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOmZhbHNlDQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0ucmVsYXRvW2luZGV4aWRdPXt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnPydibG9jayc6J25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5jaGlsZHJlblswXS5nZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKS5zbGljZSgxKTsNCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0udG9ndHlwZSA9IHRvZzsNCiAgICAgICAgfQ0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNoaWxkc1tpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmNoaWxkKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoY2FsbHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2FsbCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgY2lkID0gY2FsbHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jYWxsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoYm91bmRhcnkubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uYm91bmRhcnkgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZGFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9Ym91bmRhcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5ib3VuZGFyeSk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKHN1bW1hcnkubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uc3VtbWFyeSA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1bW1hcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBzdW1tYXJ5W2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uc3VtbWFyeSk7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0taW5pdGlhbGl6ZQ0KLy90b2dnbGVkaXNwbGF5LS0NCnZhciBjaGFpbkFycj1bXTsNCmZ1bmN0aW9uIGdldGNoYWluKGlkKXsNCiAgICBjaGFpbkFyci51bnNoaWZ0KCdtJytpZCk7DQogICAgdmFyIHBhcmVudD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmKCFwYXJlbnQpew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFycj1bXTsNCiAgICBnZXRjaGFpbihpZCk7DQogICAgdmFyIG1haW49Y2hhaW5BcnJbMF07DQogICAgaWYoY2hhaW5BcnIubGVuZ3RoPjEpew0KICAgICAgICB2YXIgb2JqPWRhdGFUcmVlW21haW5dOw0KICAgICAgICAvLyBjb25zb2xlLmxvZyhjaGFpbkFycik7DQogICAgICAgIGZvcih2YXIgaT0xO2k8Y2hhaW5BcnIubGVuZ3RoO2krKykgew0KICAgICAgICAgICAgdmFyIGEgPSBjaGFpbkFycltpXTsNCiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8T2JqZWN0LmtleXMob2JqKS5sZW5ndGg7aisrKXsNCiAgICAgICAgICAgICAgICB2YXIgY29iaj0gb2JqW09iamVjdC5rZXlzKG9iailbal1dW2FdOw0KICAgICAgICAgICAgICAgIGlmKGNvYmopew0KICAgICAgICAgICAgICAgICAgICBvYmo9Y29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH1lbHNlew0KICAgICAgICB2YXIgb2JqPWRhdGFUcmVlW21haW5dOw0KICAgICAgICByZXR1cm4gb2JqDQogICAgfQ0KDQp9DQpmb3IodmFyIGk9MDtpPHNoYXBlLmxlbmd0aDtpKyspew0KICAgIHNoYXBlW2ldLm9uY2xpY2s9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgaWQ9TnVtYmVyKHRoaXMuZ2V0QXR0cmlidXRlKCdlZDp0b2d0b3BpY2lkJykpOw0KICAgICAgICB2YXIgb2JqPWdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGU9b2JqLnRvZ3R5cGU9PT0nbWludXMnPydwbHVzJzonbWludXMnOw0KICAgICAgICB2YXIgZGlzcGxheT1vYmoudG9ndHlwZT09PSdtaW51cyc/J25vbmUnOidibG9jayc7DQogICAgICAgIHRoaXMuY2hpbGRyZW5bMF0uc2V0QXR0cmlidXRlKCd4bGluazpocmVmJywnIycrdHlwZSk7DQogICAgICAgIG9iai50b2d0eXBlPXR5cGU7DQogICAgICAgIGNoZWNrSUQ9b2JqOw0KDQogICAgICAgIHV0ZChvYmosaWQsZGlzcGxheSk7DQogICAgICAgIGV4dHJhUmVsYUZpbigpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHV0ZChvYmosaWQsc2hvdyxvYykgew0KDQogICAgdmFyIHBzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5IT09ICdub25lJz8nYmxvY2snOidub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKXsNCiAgICAgICAgaWYob2JqLnJlbGFmcm9tLmRpc3BsYXkhPT0gcHNob3cpew0KICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLDEpOw0KICAgICAgICAgICAgZm9yKHZhciBrPTA7azxyZWxhZnJvbXMubGVuZ3RoO2srKyl7DQogICAgICAgICAgICAgICAgdmFyIGQ9cmVsYWZyb21zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9iai5yZWxhZnJvbS5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5yZWxhdG8pew0KICAgICAgICBpZihvYmoucmVsYXRvLmRpc3BsYXkhPT0gcHNob3cpew0KICAgICAgICAgICAgdmFyIHJlbGF0b3M9T2JqZWN0LmtleXMob2JqLnJlbGF0byk7DQogICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwxKTsNCiAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYXRvcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICB2YXIgZD1yZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9iai5yZWxhdG8uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKG9iai5jYWxsKXsNCiAgICAgICAgdmFyIGNhbGxzPU9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYoY2hlY2tJRCE9PW9iail7DQogICAgICAgICAgICBmb3IodmFyIGk9MDtpIDwgY2FsbHMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9Y2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGI9b2JqLmNhbGxbY2FsbHNbaV1dOw0KICAgICAgICAgICAgICAgIHZhciBjPWIudG9ndHlwZTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20mJiFjKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoYi5yZWxhZnJvbS5kaXNwbGF5IT09IHNob3cpew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhiLnJlbGFmcm9tKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGFmcm9tcy5zcGxpY2UocmVsYWZyb21zLmluZGV4T2YoJ2Rpc3BsYXknKSwxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYWZyb21zLmxlbmd0aDtrKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGFmcm9tc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byYmIWMpew0KICAgICAgICAgICAgICAgICAgICBpZihiLnJlbGF0by5kaXNwbGF5IT09IHNob3cpew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3M9T2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGs9MDtrPHJlbGF0b3MubGVuZ3RoO2srKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQ9cmVsYXRvc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoKGIuY2FsbHx8Yi5ib3VuZGFyeXx8Yi5zdW1tYXJ5KSYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93LHRydWUpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYixhLHNob3csdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKGIuc3VtbWFyeSYmIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSYmIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKG9iai5zdW1tYXJ5KXsNCiAgICAgICAgdmFyIHN1bW1hcnlzPU9iamVjdC5rZXlzKG9iai5zdW1tYXJ5KTsNCiAgICAgICAgaWYoKGNoZWNrSUQhPT1vYmomJihvYmoudG9ndHlwZT09PSdtaW51cyd8fCFvYmoudG9ndHlwZSkpfHxjaGVja0lEPT09b2JqKXsNCiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8c3VtbWFyeXMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9c3VtbWFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGI9b2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCi8vICAgICAgICAgICAgICAgIGlmKGMpew0KLy8gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciK2ErIiddIikuc3R5bGUuZGlzcGxheT1zaG93Ow0KLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCi8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCi8vICAgICAgICAgICAgICAgICAgICB9DQovLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQovLyAgICAgICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KLy8gICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3csdHJ1ZSkNCi8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyhiKS5sZW5ndGghPT0wKXsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZihvYmouYm91bmRhcnkpew0KICAgICAgICB2YXIgYm91bmRhcnlzPU9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmKGNoZWNrSUQhPT1vYmopew0KICAgICAgICAgICAgZm9yKHZhciBpPTA7aTxib3VuZGFyeXMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9Ym91bmRhcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBiPW9iai5ib3VuZGFyeVtib3VuZGFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCi8vICAgICAgICAgICAgICAgIGlmKGMpew0KLy8gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciK2ErIiddIikuc3R5bGUuZGlzcGxheT1zaG93Ow0KLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCi8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCi8vICAgICAgICAgICAgICAgICAgICB9DQovLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQovLyAgICAgICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KLy8gICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3csdHJ1ZSkNCi8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyhiKS5sZW5ndGghPT0wKXsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZighb2MmJm9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSYmIWMpew0KICAgICAgICAgICAgICAgIGlmKGIucmVsYWZyb20uZGlzcGxheSE9PSBzaG93KXsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhiLnJlbGFmcm9tKTsNCiAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGs9MDtrPHJlbGFmcm9tcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGFmcm9tc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byYmIWMpew0KICAgICAgICAgICAgICAgIGlmKGIucmVsYXRvLmRpc3BsYXkhPT0gc2hvdyl7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zPU9iamVjdC5rZXlzKGIucmVsYXRvKTsNCiAgICAgICAgICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksMSk7DQogICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYXRvcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYixhLHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsfHxiLmJvdW5kYXJ5fHxiLnN1bW1hcnkpJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLmNhbGwmJiFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93LHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5JiYhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5JiYhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gZXh0cmFSZWxhRmluKCkgew0KICAgIHZhciBleHRyYWtleXM9T2JqZWN0LmtleXMoZXh0cmFSZWxhKTsNCiAgICBmb3IodmFyIGk9MDtpPGV4dHJha2V5cy5sZW5ndGg7aSsrKXsNCiAgICAgICAgdmFyIGV4dHJhT2JqPWV4dHJhUmVsYVtleHRyYWtleXNbaV1dOw0KICAgICAgICBpZihleHRyYU9iai5pc0MgPT09IHRydWUpew0KICAgICAgICAgICAgdmFyIGZzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0nbm9uZSc/IHRydWU6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLnRvaWQpLnN0eWxlLmRpc3BsYXkgIT09J25vbmUnPyB0cnVlOiBmYWxzZTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmlkKS5zdHlsZS5kaXNwbGF5PWZzaG93ICYmIHRzaG93PyAnYmxvY2snOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
